package com.anzia.storeback.dao;

import com.anzia.storeback.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

@Repository
public interface UserDao {

    // 登陆
    @Select("select user_id, userName, userPhoneNumber, email, gender from users where userName=#{userName} and password=#{password}")
    User login(String userName, String password);

    // 根据用户名查询不为null的数目
    // COUNT(列名) 表示的是查询符合条件的列的值不为NULL的行数
    // count(1)和count(*)，MySQL的优化是完全一样的，根本不存在谁更快
    @Select("select count(1) from users where userName=#{userName}")
    int findUserByName(String userName);

    // 根据用户ID查询不为null的数目
    @Select("select count(1) from users where user_id=#{user_id}")
    int findUserById(Integer user_id);

    // 注册用户，salt是盐值，用于加密
    @Insert("insert into users(userName, password, salt, register_time, login_count) values(#{userName}, #{password}, #{salt}, now(), 1)")
    void registerUser(String userName, String password, String salt);

    // 更新用户信息
    @Update("update users set password=#{password}, userPhoneNumber=#{userPhoneNumber}, email=#{email}, gender=#{gender}")
    void updateUser(User user);

    // 根据用户名获取盐值
    @Select("select salt from users where username=#{userName}")
    String getSalt(String userName);

    // 根据用户名获取用户信息
    @Select("select * from users where username=#{userName}")
    User findByUserName(String userName);

    // 更新用户登陆次数
    @Update("update users set login_count=login_count + #{count} where username=#{username}")
    void updateLoginCount(String username, int count);

}
